Description:
SDMC detects if all subclasses of a class vary only in methods that return constant data. In such cases, it is suggested to change the methods to superclass fields and eliminate the subclasses.
Incorrect:
Person = class abstract
private
function isMale():boolean;virtual;abstract;
function getCode():char;virtual;abstract;
end;
Male = class(Person)
private
function isMale():boolean;override;
function getCode():char;override;
end;
Female = class(Person)
private
function isMale():boolean;override;
function getCode():char;override;
end;
...
function Male.isMale():boolean;
begin
result := true;
end;
function Male.getCode():char;
begin
result := 'M';
end;
function Female.isMale():boolean;
begin
result := false;
end;
function Female.getCode():char;
begin
result := 'F';
end;
Correct:
Person = class
strict private
myIsMale:boolean;
code:char;
private
function isMale():boolean;
function getCode():char;
end;
...
function Person.getCode():char;
begin
result := code;
end;
function Person.isMale():boolean;
begin
result := myIsMale;
end;
Refactoring: